package com.sky.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.ReactiveRedisConnectionFactory;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Slf4j
@Configuration
public class RedisConfiguration {

    //@Autowired
    //private RedisConnectionFactory connectionFactory;
    @Bean  //生成第三方依赖的bean对象，这样在三层架构里面使用的时候就不用再new对象了，
          //@Bean使用在配置类里面，我们可以对配置类里面的方法进行选择性改动，这样第三方依赖的bean对象作用范围就比较有针对性。
    public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) {
        log.info("redisTemplate初始化...");
        RedisTemplate redisTemplate = new RedisTemplate();//创建工具类RedisTemplate对象

        //设置key的序列化器,默认Jdk8Serializers
        redisTemplate.setKeySerializer(new StringRedisSerializer());//目的是看序列化之后的key
        //redisTemplate调用setKeySerializer（指定序列化器方法）指定使用new StringRedisSerializer()这个序列化器
        //redisTemplate.setValueSerializer(new StringRedisSerializer()); //不建议设置value的序列化器
        redisTemplate.setConnectionFactory(connectionFactory);
        //redisTemplate调用连接工厂的方法setConnectionFactory跟工厂对象connectionFactory链接，
        // 达到idea和Redis的关联，就可以通过idea操作Redis.
        return redisTemplate;
        //RedisTemplate是操作Redis的工具类，封装了操作Redis的方法
        //这段代码的意思是告诉RedisTemplate要使用指定的连接工厂来建立与Redis数据库的连接。
        // 这样一来，当执行与Redis数据库相关的操作时，如写入数据或获取数据，
        // RedisTemplate就会使用指定的连接工厂来进行连接和通信。
        /*==========解释一=============*/
        //redisTemplate.setConnectionFactory(connectionFactory);这段代码实际是一个简写代码
        //本来是要注入private RedisConnectionFactory connectionFactory;
        //然后才使用redisTemplate.setConnectionFactory()方法，传入connectionFactory参数
        //因为使用@bean注解，直接以形参的形式简写注入。




    }
}
